Apex Governor Limits (Apex Governor Limits)

Computer Programming - এপেক্স (Apex)
266
266

Apex Governor Limits হলো Salesforce-এর নির্ধারিত কিছু সীমাবদ্ধতা, যা Apex কোড চালানোর সময় বিভিন্ন রিসোর্সের ব্যবহার সীমাবদ্ধ করে। Salesforce একটি মাল্টি-টেন্যান্ট পরিবেশ হওয়ায়, প্রত্যেকটি অর্গকে নির্দিষ্ট সীমার মধ্যে রিসোর্স ব্যবহারের নির্দেশ দেয়া হয়। Apex Governor Limits ডেটা প্রসেসিং, স্টোরেজ, এবং পারফরম্যান্স ব্যবস্থাপনা নিশ্চিত করে, যাতে প্ল্যাটফর্মে ভারসাম্য বজায় থাকে এবং সকল ব্যবহারকারী নির্ধারিত রিসোর্স পায়।


Apex Governor Limits এর কারণ

Governor Limits এর মূল কারণ হলো Salesforce প্ল্যাটফর্মের স্থায়িত্ব ও পারফরম্যান্স নিশ্চিত করা। মাল্টি-টেন্যান্ট আর্কিটেকচারে একটি একক সার্ভার হাজার হাজার ব্যবহারকারী শেয়ার করে, তাই এক ব্যবহারকারী যেন অতিরিক্ত রিসোর্স ব্যবহার করে অন্যদের পারফরম্যান্সে প্রভাব না ফেলে, সেজন্য Governor Limits ব্যবহার করা হয়।


Apex Governor Limits এর প্রধান সীমাবদ্ধতা

Salesforce প্ল্যাটফর্মে বিভিন্ন কার্যক্রমের উপর নির্দিষ্ট সীমা নির্ধারণ করা হয়েছে। Apex Governor Limits এর কয়েকটি গুরুত্বপূর্ণ সীমাবদ্ধতা নিচে উল্লেখ করা হলো:

DML Statements Limit:

  • প্রতি ট্রানজ্যাকশনে সর্বাধিক ১৫০টি DML স্টেটমেন্ট চালানো যায় (যেমন: insert, update, delete ইত্যাদি)।
  • বড় ডেটাসেট নিয়ে কাজ করার সময় Bulk DML ব্যবহার করে এ সীমা বজায় রাখা উচিত।

SOQL Queries Limit:

  • প্রতি ট্রানজ্যাকশনে সর্বাধিক ১০০টি SOQL কুয়েরি চালানো যায়।
  • Bulk SOQL ব্যবহার করে SOQL কুয়েরি সংখ্যা কমিয়ে আনা সম্ভব।

SOSL Queries Limit:

  • প্রতি ট্রানজ্যাকশনে সর্বাধিক ২০টি SOSL কুয়েরি চালানো যায়।

CPU Time Limit:

  • প্রতি ট্রানজ্যাকশনে সর্বাধিক ১০,০০০ মিলিসেকেন্ড CPU সময় ব্যবহার করা যায়।
  • কমপ্লেক্স লজিক বা বড় ডেটা প্রসেসিং করলে এই সীমা দ্রুত পূরণ হতে পারে।

Heap Size Limit:

  • প্রতি ট্রানজ্যাকশনে সর্বাধিক ৬ এমবি (৬,০০০ কিলোবাইট) হিপ মেমোরি ব্যবহৃত হতে পারে।
  • বড় ডেটা প্রসেস করার সময় অতিরিক্ত মেমোরি ব্যবহারের কারণে হিপ সাইজ সীমা অতিক্রম হতে পারে।

Callouts Limit:

  • প্রতি ট্রানজ্যাকশনে সর্বাধিক ১০০টি HTTP বা API কলআউট করা যায়।

Future Methods Limit:

  • প্রতি ট্রানজ্যাকশনে সর্বাধিক ৫০টি Future মেথড কল করা যায়।

Email Limit:

  • প্রতি ট্রানজ্যাকশনে সর্বাধিক ১০ টি ইমেল পাঠানো যায়।

Queueable Jobs Limit:

  • প্রতি ট্রানজ্যাকশনে সর্বাধিক ৫০টি Queueable Job চালানো যায়।

Query Rows Limit:

  • প্রতি SOQL কুয়েরিতে সর্বাধিক ৫০,০০০ রো (লিপি) ফেচ করা যায়।

Apex Governor Limits এর সাথে কাজ করার স্ট্র্যাটেজি

Governor Limits মেনে চলার জন্য কিছু কার্যকর কৌশল নিচে দেয়া হলো:

Bulkify Apex Code:

  • একাধিক রেকর্ডের উপর একত্রে DML এবং SOQL অপারেশন চালানোর জন্য Apex কোড Bulkify করা উচিত। এতে করে DML এবং SOQL কুয়েরি সংখ্যা সীমার মধ্যে থাকে।

Efficient Querying:

  • প্রয়োজনীয় ফিল্ডগুলোই কুয়েরি করা উচিত এবং WHERE ক্লজ ব্যবহার করে ডেটা ফিল্টার করা উচিত। IN অপারেটরের মাধ্যমে SOQL কুয়েরিতে একাধিক মান ফিল্টার করা সম্ভব।

Efficient Data Processing with Collections:

  • List, Set, এবং Map এর মাধ্যমে ডেটা প্রসেসিং করা উচিত, যা মেমোরি ব্যবহারের পরিমাণ হ্রাস করে।

Avoid Hardcoding Limits:

  • লুপের ভেতরে SOQL বা DML ব্যবহার না করা উচিত। এতে Governor Limits দ্রুত পূরণ হতে পারে।

Utilize @future and Queueable Apex:

  • বড় ডেটা প্রসেসিং বা লং-রানিং অপারেশনের ক্ষেত্রে @future এবং Queueable Apex ব্যবহার করা উচিত, যা পৃথক ট্রানজ্যাকশনে কার্যক্রম সম্পন্ন করে।

Caching and Batching:

  • বড় ডেটাসেটের ক্ষেত্রে Caching এবং Batching কৌশল ব্যবহার করে ডেটা ব্যবস্থাপনা করা উচিত। Batching দ্বারা ডেটা একাধিক অংশে ভাগ করা যায়।

উদাহরণ: Bulkified Apex Code

নিচে একটি Bulkified Apex কোড উদাহরণ দেখানো হলো, যেখানে Account অবজেক্টের উপর DML অপারেশন করা হয়েছে।

public class AccountHandler {
    public static void updateAccounts(List<Account> accounts) {
        List<Account> updateAccounts = new List<Account>();

        for (Account acc : accounts) {
            if (acc.Industry == 'Technology') {
                acc.Rating = 'Hot';
                updateAccounts.add(acc);
            }
        }

        // Bulk DML Operation
        if (!updateAccounts.isEmpty()) {
            update updateAccounts;
        }
    }
}
  • এখানে updateAccounts মেথডে একাধিক Account রেকর্ডের উপর Bulk DML অপারেশন চালানো হয়েছে।
  • updateAccounts.add(acc) লিস্ট ব্যবহার করে একত্রে update DML অপারেশন চালানো হয়েছে।

Governor Limits লঙ্ঘন করলে কি হয়?

যদি কোনো Apex কোড Governor Limits লঙ্ঘন করে, তবে তৎক্ষণাৎ একটি System.LimitException তৈরি হয় এবং কোডটি ব্যর্থ হয়। এ কারণে Governor Limits লঙ্ঘন না করা অত্যন্ত গুরুত্বপূর্ণ।


সারসংক্ষেপ

  • Apex Governor Limits হলো Salesforce-এ নির্দিষ্ট সীমাবদ্ধতা, যা রিসোর্স ব্যবহারে সঠিক নিয়ন্ত্রণ দেয়।
  • Governor Limits মেনে চলা প্ল্যাটফর্মের স্থায়িত্ব ও পারফরম্যান্স নিশ্চিত করে।
  • Bulkify Apex Code এবং Efficient Querying সহ কিছু স্ট্র্যাটেজি ব্যবহার করে Governor Limits মেনে কার্যকরী Apex কোড লেখা সম্ভব।

Apex Governor Limits মেনে কোড লেখা হলে Salesforce প্ল্যাটফর্মের রিসোর্স ব্যবহার কার্যকরী ও নির্ভরযোগ্য হয়, যা ব্যবহারকারীর অভিজ্ঞতাকে উন্নত করে এবং অ্যাপ্লিকেশনকে স্থায়িত্ব দেয়।

common.content_added_by

Apex Governor Limits এর ধারণা এবং এর প্রয়োজনীয়তা

193
193

Apex Governor Limits হলো Salesforce-এর একটি নিয়ম, যা একটি Apex কোড ব্লকে ব্যবহৃত রিসোর্সের পরিমাণ নির্ধারণ ও সীমিত করে। Salesforce একটি মাল্টি-টেন্যান্ট প্ল্যাটফর্ম, যার মানে একাধিক ব্যবহারকারী একই শারীরিক সার্ভার শেয়ার করে। এর ফলে, Salesforce নিশ্চিত করে যে, একটি ব্যবহারকারীর কোড বা প্রক্রিয়া সার্ভারের অতিরিক্ত রিসোর্স না নেয় এবং অন্য ব্যবহারকারীদের কার্যক্রমে ব্যাঘাত সৃষ্টি না করে।

Apex Governor Limits ব্যবহার করে Salesforce প্রতিটি অ্যাপ্লিকেশন বা কোড ব্লকের জন্য নির্দিষ্ট রিসোর্সের সীমা নির্ধারণ করে, যেমন DML অপারেশনের সংখ্যা, SOQL কুয়েরির সংখ্যা, API কলের সংখ্যা ইত্যাদি। যদি কোনো Apex কোড Governor Limits অতিক্রম করে, তবে Salesforce একটি Exception তৈরি করে এবং কোড এক্সিকিউশন বন্ধ করে দেয়।


Apex Governor Limits এর প্রধান উদ্দেশ্য ও প্রয়োজনীয়তা

সার্ভার পারফরম্যান্স নিশ্চিতকরণ: Governor Limits নিশ্চিত করে যে একাধিক ব্যবহারকারী একই শারীরিক সার্ভারে কাজ করলেও সার্ভারের কার্যক্ষমতা বজায় থাকে এবং সার্ভারে অতিরিক্ত লোড পড়ে না।

রিসোর্স ব্যবহারের সামঞ্জস্য রক্ষা: Apex কোড সীমার মধ্যে থেকে রিসোর্স ব্যবহার করে, যাতে অন্য ব্যবহারকারীদের কার্যক্রমে ব্যাঘাত না ঘটে।

ত্রুটি সনাক্তকরণ: Governor Limits-এর কারণে উন্নয়নকারীরা দ্রুত জানতে পারেন কোড কোথায় অতিরিক্ত রিসোর্স ব্যবহার করছে এবং সঠিক অপটিমাইজেশন করে কোড কার্যক্ষমতা উন্নত করতে পারেন।

সিস্টেম স্থায়িত্ব এবং নিরাপত্তা নিশ্চিতকরণ: Governor Limits নিশ্চিত করে যে কোনো ব্যবহারকারী বা কোড সার্ভারের অতিরিক্ত রিসোর্স নিয়ে পুরো সিস্টেমের কার্যক্ষমতা বা নিরাপত্তার জন্য ঝুঁকি তৈরি না করে।


Apex Governor Limits এর কিছু প্রধান সীমাবদ্ধতা

Salesforce-এ বিভিন্ন ধরনের Governor Limits রয়েছে, যা বিভিন্ন কার্যক্রমে রিসোর্স ব্যবহারের সীমা নির্ধারণ করে। Apex-এর প্রধান Governor Limits এর কিছু উদাহরণ নিচে দেয়া হলো।

SOQL Query Limits: একটি Transaction-এ সর্বাধিক ১০০টি SOQL কুয়েরি চালানো যায়। এটি Bulk SOQL Query ব্যবহার করে কোড অপ্টিমাইজেশনে সহায়ক।

DML Statement Limits: একটি Transaction-এ সর্বাধিক ১৫০টি DML অপারেশন চালানো যায়, যেমন insert, update, delete ইত্যাদি। এটি Bulk DML ব্যবহার করে কোড কার্যক্ষমতা উন্নত করতে সহায়ক।

CPU Time Limit: একটি Transaction-এ Apex কোডের জন্য সর্বাধিক CPU সময় ১০,০০০ মিলিসেকেন্ড (আনুমানিক ১০ সেকেন্ড)।

Heap Size Limit: একটি Transaction-এ সর্বাধিক ৬ এমবি হিপ মেমোরি ব্যবহার করা যায়। এটি বড় ডেটা প্রসেসিং-এর সময় কোড কার্যক্ষমতা নিশ্চিত করে।

Callout Limit: একটি Transaction-এ সর্বাধিক ১০০টি HTTP বা API কলআউট করা যায়। এটি বহিরাগত সার্ভারে কল করার সীমা নির্ধারণ করে।

Total Number of Records Retrieved by SOQL Queries: একটি Transaction-এ সর্বাধিক ৫০,০০০টি রেকর্ড SOQL কুয়েরি দ্বারা রিটার্ন করা যায়। এটি বড় ডেটাসেটের জন্য কাজের কার্যক্ষমতা উন্নত করে।

Number of Future Calls: একটি Transaction-এ সর্বাধিক ৫০টি Future Method কল করা যায়।


Apex Governor Limits এর উদাহরণ

নিচের উদাহরণে SOQL এবং DML অপারেশন সীমার মধ্যে রাখা হয়েছে।

public class AccountManager {
    public void updateAccountIndustry(List<Id> accountIds) {
        // Governor Limit মেনে Bulk SOQL Query ব্যবহার করা হয়েছে
        List<Account> accounts = [SELECT Id, Industry FROM Account WHERE Id IN :accountIds];
        
        for (Account acc : accounts) {
            acc.Industry = 'Technology';
        }

        // Governor Limit মেনে Bulk DML Statement ব্যবহার করা হয়েছে
        update accounts;
    }
}
  • এখানে SOQL এবং DML অপারেশন সীমার মধ্যে ব্যবহার করা হয়েছে, যা Governor Limit মেনে কার্যক্ষমতা বজায় রাখে।

Governor Limits অতিক্রম হলে কী হয়?

যদি কোনো Apex কোড Governor Limits অতিক্রম করে, তবে Salesforce একটি Unhandled Exception তৈরি করে, যার ফলে Transaction বন্ধ হয়ে যায় এবং প্রক্রিয়াটি সম্পন্ন হয় না। উদাহরণস্বরূপ, SOQL কুয়েরির সংখ্যা ১০০ এর বেশি হলে Too Many SOQL Queries Exception তৈরি হয়।

Exception উদাহরণ:

try {
    // কোড যা Governor Limits অতিক্রম করতে পারে
} catch (Exception e) {
    System.debug('Exception Occurred: ' + e.getMessage());
}
  • এখানে Governor Limits অতিক্রম করলে Exception তৈরি হবে এবং catch ব্লক সেই Exception ক্যাপচার করবে।

Governor Limits মেনে কোড অপ্টিমাইজেশনের কৌশল

Bulkification: একাধিক রেকর্ড একত্রে প্রক্রিয়া করতে Bulk SOQL ও Bulk DML অপারেশন ব্যবহার করা উচিত। উদাহরণ: Loop-এর ভিতরে DML অপারেশন ব্যবহার না করে Loop-এর বাইরে একবারে প্রক্রিয়া করা।

Collection ব্যবহার: অনেক রেকর্ড নিয়ে কাজ করার সময় List, Set, বা Map ব্যবহার করা উচিত, যাতে কোড আরও কার্যকর ও সীমার মধ্যে থাকে।

Efficient Querying: Query-তে শুধুমাত্র প্রয়োজনীয় ফিল্ডগুলো উল্লেখ করুন এবং যেখানে সম্ভব LIMIT ব্যবহার করুন, যা CPU এবং SOQL ব্যবহার সীমার মধ্যে রাখে।

Avoid Recursive Trigger: Trigger-এর মধ্যে Recursive Loop এড়িয়ে চলা উচিত, যাতে Governor Limit অতিক্রম না হয়।

Asynchronous Processing: বড় ডেটা প্রসেসিং বা লং-রানিং অপারেশনের জন্য Asynchronous Apex যেমন Future Method, Queueable Apex, Batch Apex ব্যবহার করা।


সংক্ষেপে

Apex Governor Limits Salesforce প্ল্যাটফর্মে কোড এক্সিকিউশন ও রিসোর্স ব্যবহারের সীমা নির্ধারণ করে, যা সার্ভারের স্থায়িত্ব, কার্যক্ষমতা, এবং নিরাপত্তা নিশ্চিত করে। Governor Limits Apex ডেভেলপারদেরকে কার্যকরী কোড অপ্টিমাইজ করতে সহায়ক এবং Salesforce প্ল্যাটফর্মে কার্যক্ষম ও সীমাবদ্ধতা বজায় রেখে কাজ করতে উৎসাহিত করে।

common.content_added_by

SOQL, SOSL, এবং DML Limits

281
281

Salesforce-এ SOQL, SOSL, এবং DML অপারেশনের উপর কিছু নির্দিষ্ট Governor Limits রয়েছে, যা Apex কোড চালানোর সময় নির্ধারিত রিসোর্সের সীমা নিয়ন্ত্রণ করে। এসব লিমিট নিশ্চিত করে যে Apex কোড মাল্টি-টেন্যান্ট আর্কিটেকচারের মধ্যে ভারসাম্য রক্ষা করে এবং অতিরিক্ত রিসোর্স ব্যবহারের কারণে অন্য ব্যবহারকারীদের পারফরম্যান্সের উপর প্রভাব না পড়ে।


SOQL (Salesforce Object Query Language) Limits

SOQL কুয়েরি চালানোর সময় কিছু নির্দিষ্ট সীমাবদ্ধতা মেনে চলতে হয়, যা নিম্নরূপ:

SOQL Queries per Transaction:

  • প্রতি ট্রানজ্যাকশনে সর্বাধিক ১০০টি SOQL কুয়েরি চালানো যায়। (সিঙ্ক্রোনাস কনটেক্সট)
  • অ্যাসিঙ্ক্রোনাস (যেমন Future মেথড) কনটেক্সটে সর্বাধিক ২০০টি SOQL কুয়েরি চালানো যায়।

Query Rows Returned:

  • প্রতি SOQL কুয়েরিতে সর্বাধিক ৫০,০০০টি রো (row) রিটার্ন করা যায়।
  • এটি বড় ডেটাসেটের ক্ষেত্রে প্রয়োজনীয় ডেটা ফিল্টারিং এবং সীমাবদ্ধ করা নিশ্চিত করে।

Total Number of Records Retrieved:

  • একটি ট্রানজ্যাকশনে মোট রিটার্ন হওয়া রেকর্ড সংখ্যা ৫০,০০০ এর বেশি হতে পারে না।

উদাহরণ: SOQL Limits ব্যবহারের ক্ষেত্রে

List<Account> accounts = [SELECT Id, Name FROM Account LIMIT 100];
  • এখানে LIMIT ক্লজ ব্যবহার করে SOQL কুয়েরির মাধ্যমে ডেটা সীমাবদ্ধ করা হয়েছে।

SOSL (Salesforce Object Search Language) Limits

SOSL কুয়েরি চালানোর সময় কিছু নির্দিষ্ট সীমাবদ্ধতা আছে, যা নিম্নরূপ:

  1. SOSL Queries per Transaction:
    • প্রতি ট্রানজ্যাকশনে সর্বাধিক ২০টি SOSL কুয়েরি চালানো যায়।
  2. Records Returned by SOSL:
    • প্রতি SOSL কুয়েরিতে একসাথে ২০০০টি রেকর্ড রিটার্ন করা যায়।
    • বড় ডেটাসেট হলে অতিরিক্ত রেকর্ড ফেচ করতে OFFSET বা পেজিনেশন ব্যবহার করতে হতে পারে।

উদাহরণ: SOSL Limits ব্যবহারের ক্ষেত্রে

List<List<SObject>> searchResults = [FIND 'Tech' IN ALL FIELDS RETURNING Account(Name), Contact(FirstName, LastName) LIMIT 2000];
  • এখানে LIMIT ব্যবহার করে কুয়েরি দ্বারা প্রাপ্ত রেকর্ড সংখ্যা ২০০০ এর মধ্যে সীমাবদ্ধ করা হয়েছে।

DML (Data Manipulation Language) Limits

DML অপারেশন চালানোর সময় কিছু নির্দিষ্ট সীমাবদ্ধতা আছে, যা নিম্নরূপ:

DML Statements per Transaction:

  • প্রতি ট্রানজ্যাকশনে সর্বাধিক ১৫০টি DML স্টেটমেন্ট চালানো যায়।
  • বড় ডেটাসেট নিয়ে কাজ করার সময় Bulk DML ব্যবহার করে DML স্টেটমেন্টের সংখ্যা কমানো সম্ভব।

Total DML Rows Processed:

  • প্রতি ট্রানজ্যাকশনে সর্বাধিক ১০,০০০টি রেকর্ডে DML অপারেশন চালানো যায়।
  • বড় ডেটাসেটের ক্ষেত্রে Batch Apex বা Queueable Apex ব্যবহার করে রেকর্ড প্রক্রিয়াকরণ করতে হবে।

Nesting DML Operations:

  • এক DML অপারেশনের ভিতরে আরেকটি DML অপারেশন এড়ানো উচিত। এটি গভর্নর লিমিট অতিক্রম করতে পারে।

উদাহরণ: DML Limits ব্যবহারের ক্ষেত্রে

List<Account> accountList = new List<Account>();
for (Integer i = 1; i <= 10000; i++) {
    accountList.add(new Account(Name = 'Account ' + i));
}

// Bulk DML Operation to stay within DML row limits
insert accountList;
  • এখানে accountList এ একবারে ১০,০০০টি রেকর্ড ইন্সার্ট করা হয়েছে।

SOQL, SOSL, এবং DML Limits এর সংক্ষিপ্ত তালিকা

অপারেশনলিমিটবিবরণ
SOQL Queries১০০ (সিঙ্ক্রোনাস), ২০০ (অ্যাসিঙ্ক্রোনাস)প্রতি ট্রানজ্যাকশনে সর্বাধিক SOQL কুয়েরি সংখ্যা
SOQL Query Rows৫০,০০০ রোএকটি ট্রানজ্যাকশনে সর্বাধিক রিটার্ন হওয়া রো সংখ্যা
SOSL Queries২০টিপ্রতি ট্রানজ্যাকশনে সর্বাধিক SOSL কুয়েরি সংখ্যা
SOSL Query Rows২০০০টিপ্রতি SOSL কুয়েরিতে সর্বাধিক রিটার্ন হওয়া রো সংখ্যা
DML Statements১৫০টিপ্রতি ট্রানজ্যাকশনে সর্বাধিক DML স্টেটমেন্ট সংখ্যা
DML Rows Processed১০,০০০টিপ্রতি ট্রানজ্যাকশনে সর্বাধিক DML প্রক্রিয়াকৃত রেকর্ড সংখ্যা

Governor Limits অতিক্রম এড়ানোর কৌশল

  1. Bulk SOQL & DML ব্যবহার করুন: একাধিক রেকর্ডে একত্রে অপারেশন চালাতে Bulk DML ও SOQL ব্যবহার করুন, যা গভর্নর লিমিট বজায় রাখতে সহায়ক।
  2. Efficient Querying: SOQL এবং SOSL কুয়েরির মাধ্যমে প্রয়োজনীয় ফিল্ডগুলোর উপর সীমাবদ্ধতা আরোপ করুন এবং ডেটা ফিল্টার করুন।
  3. Batch Apex ও Queueable Apex ব্যবহার করুন: বড় ডেটাসেটের জন্য Batch Apex এবং Queueable Apex ব্যবহার করে ট্রানজ্যাকশন ভেঙে নিন।
  4. Avoid Nested DML Operations: DML অপারেশনের ভিতরে আরেকটি DML অপারেশন এড়িয়ে চলুন।
  5. Use @future and Queueable Methods: দীর্ঘ প্রক্রিয়াকরণ বা বড় ডেটাসেটের জন্য @future এবং Queueable মেথড ব্যবহার করুন।

সারসংক্ষেপ

  • SOQL, SOSL, এবং DML অপারেশনের উপর Salesforce এর নির্ধারিত লিমিট রয়েছে।
  • Governor Limits মেনে Apex কোড লিখলে অ্যাপ্লিকেশনের স্থায়িত্ব ও পারফরম্যান্স বৃদ্ধি পায়।
  • Bulk DML, SOQL, এবং Efficient Querying এর মাধ্যমে Governor Limits লঙ্ঘন না করেও বড় ডেটাসেট সফলভাবে পরিচালনা করা যায়।

Governor Limits মেনে Apex কোড লেখা Salesforce প্ল্যাটফর্মের জন্য অত্যন্ত গুরুত্বপূর্ণ, যা মাল্টি-টেন্যান্ট পরিবেশে ডেটা ম্যানিপুলেশন ও ডেটা প্রসেসিং কার্যকরভাবে পরিচালনা করতে সহায়ক।

common.content_added_by

Apex Heap Size এবং CPU Time Limit

222
222

Apex Heap Size এবং CPU Time Limit Salesforce-এ কোডের কার্যক্ষমতা ও কার্যক্ষম সীমার মধ্যে কার্যক্রম পরিচালনা করতে গুরুত্বপূর্ণ ভূমিকা পালন করে।


Apex Heap Size

Heap Size হলো এমন একটি সীমা, যা একটি Transaction চলাকালীন মেমোরিতে সংরক্ষিত ডেটার সর্বোচ্চ আকারকে নির্ধারণ করে। Apex-এ একটি Transaction চলাকালীন সর্বাধিক ৬ এমবি (Synchronous Apex) এবং ১২ এমবি (Asynchronous Apex) পর্যন্ত Heap Size ব্যবহার করা যায়। যদি Heap Size লিমিট অতিক্রম করে, তাহলে একটি "Apex heap size too large" Exception তৈরি হয় এবং Transaction বন্ধ হয়ে যায়।

Heap Size ব্যবহারের কারণ

  1. বড় ডেটাসেট প্রসেসিং: বড় ডেটাসেট নিয়ে কাজ করার সময় অনেক ডেটা মেমোরিতে সংরক্ষণ করতে হয়, যা Heap Size ব্যবহার করে।
  2. অবজেক্ট এবং ডেটা সংগ্রহ: যখন একটি Transaction-এ বড় ডেটা সংগ্রহ বা অনেক অবজেক্ট তৈরি করা হয়, তখন তা মেমোরিতে জমা হয়, যা Heap Size-এ প্রভাব ফেলে।
  3. দ্বিতীয় বার মেমোরি ব্যবহার: কোনো মেমোরি ক্রিয়েশন বা ডেটা স্টোরেজ পুনরাবৃত্তি হলে Heap Size দ্রুত পূর্ণ হয়।

Heap Size অপ্টিমাইজ করার কৌশল

  • Collections এড়িয়ে চলুন: যখন বড় ডেটাসেট নিয়ে কাজ করছেন, তখন অপ্রয়োজনীয় Collections এড়িয়ে চলুন এবং যেসব ডেটা আর প্রয়োজন নেই তা null সেট করুন।
  • SOQL Query Results Filter করুন: SOQL কুয়েরিতে প্রয়োজনীয় ফিল্ড এবং রেকর্ডগুলো ফেরত দিন এবং Limit ব্যবহার করুন।
  • Batch Apex ব্যবহার করুন: বড় ডেটাসেট প্রসেস করার জন্য Batch Apex ব্যবহার করুন, যা একাধিক ব্যাচে ডেটা প্রসেস করে এবং Heap Size লিমিটের মধ্যে থাকে।

উদাহরণ: Heap Size অপ্টিমাইজেশন

public class HeapSizeExample {
    public void processLargeData() {
        List<Account> accounts = [SELECT Id, Name FROM Account LIMIT 1000];
        
        // প্রয়োজন শেষে বড় ডেটাসেট ক্লিয়ার করা
        accounts = null;
        System.debug('Heap Size optimized by clearing unused data');
    }
}

Apex CPU Time Limit

CPU Time Limit হলো এমন একটি সীমা, যা একটি Transaction-এ কোড এক্সিকিউশনের সময় নির্ধারণ করে। Salesforce একটি Transaction-এ সর্বাধিক ১০,০০০ মিলিসেকেন্ড (১০ সেকেন্ড) পর্যন্ত CPU সময় বরাদ্দ করে। যদি কোনো Transaction CPU Time Limit অতিক্রম করে, তবে "Apex CPU time limit exceeded" Exception তৈরি হয় এবং Transaction বন্ধ হয়ে যায়।

CPU Time Limit ব্যবহারের কারণ

  1. বড় লজিক বা কমপ্লেক্স কোড: যদি কোডে অনেক লজিক্যাল স্টেটমেন্ট থাকে বা কমপ্লেক্স অ্যালগরিদম ব্যবহার করা হয়, তাহলে CPU সময় দ্রুত শেষ হয়ে যায়।
  2. Loop বা Recursive Trigger: Loop বা Recursive Trigger ব্যবহার করলে কোডের এক্সিকিউশন বার বার হতে পারে, যা CPU সময় দ্রুত ব্যবহার করে ফেলে।
  3. বেশি DML বা SOQL অপারেশন: বেশি পরিমাণ DML বা SOQL অপারেশন চালালে CPU সময় বেশি ব্যবহৃত হয়।

CPU Time Limit অপ্টিমাইজ করার কৌশল

  • Loop-এর ভিতরে SOQL বা DML এড়িয়ে চলুন: Loop-এর ভিতরে SOQL বা DML অপারেশন এড়িয়ে Bulk SOQL এবং DML অপারেশন ব্যবহার করুন।
  • Loop এবং Recursive Trigger অপ্টিমাইজ করুন: Unnecessary Loop বা Recursive Trigger ব্যবহার করা এড়িয়ে চলুন।
  • Efficient Algorithms ব্যবহার করুন: কোনো কার্যক্রম সম্পন্ন করার জন্য কার্যকর ও দ্রুততম অ্যালগরিদম ব্যবহার করুন।
  • Asynchronous Apex ব্যবহার করুন: বড় প্রসেস বা লং রানিং অপারেশন Async Apex (Future, Queueable, Batch Apex) ব্যবহার করে ভাগ করে নিন।

উদাহরণ: CPU Time Limit অপ্টিমাইজেশন

public class CPUTimeExample {
    public void processData() {
        List<Account> accounts = [SELECT Id, Name FROM Account LIMIT 100];

        // Loop-এর ভিতরে DML এড়িয়ে চলা
        for (Account acc : accounts) {
            acc.Name = acc.Name + ' Updated';
        }
        
        // Loop-এর বাইরে DML অপারেশন ব্যবহার করা
        update accounts;
        System.debug('CPU Time optimized by avoiding DML inside loop');
    }
}

Apex Heap Size এবং CPU Time Limit এর তুলনা

বৈশিষ্ট্যHeap SizeCPU Time Limit
প্রধান উদ্দেশ্যমেমোরিতে ডেটা সংরক্ষণের সীমা নির্ধারণকোড এক্সিকিউশনের CPU সময় নির্ধারণ
সীমাSync-এ ৬ এমবি, Async-এ ১২ এমবি১০,০০০ মিলিসেকেন্ড (১০ সেকেন্ড)
ExceptionApex heap size too largeApex CPU time limit exceeded
অপ্টিমাইজেশনের কৌশলডেটাসেট ফিল্টার, Batch Apex ব্যবহার করাLoop অপ্টিমাইজ, Async Apex ব্যবহার করা
ব্যবহারবড় ডেটাসেট বা অনেক অবজেক্ট প্রসেস করাবড় লজিক, Loop বা Recursive Trigger হ্যান্ডল করা

অপ্টিমাইজেশনের ভালো অনুশীলন

অপ্রয়োজনীয় ডেটা হ্যান্ডেলিং এড়িয়ে চলুন: মেমোরিতে ডেটা জমা রাখার সময় শুধু প্রয়োজনীয় তথ্য রাখুন এবং বড় ডেটাসেট দ্রুত রিলিজ করুন।

Async Apex ব্যবহার: বড় ও লং রানিং অপারেশন বা বড় ডেটাসেট প্রসেসিং করার জন্য Asynchronous Apex (Batch, Future, Queueable) ব্যবহার করুন।

Debug Logs এবং Governor Limits ব্যবহার করুন: Debug Logs এবং Governor Limits মনিটরিং করে অপ্টিমাইজেশন এবং অপ্টিমাইজেশন সমস্যাগুলো চিহ্নিত করুন।


সারসংক্ষেপ

  • Heap Size লিমিট একটি Transaction-এ মেমোরিতে ডেটার আকার সীমিত করে, যা বড় ডেটাসেট বা অবজেক্ট নিয়ে কাজের সময় প্রভাব ফেলে।
  • CPU Time Limit একটি Transaction-এ কোড এক্সিকিউশনের সময় সীমিত করে, যা বড় লজিক বা Loop অপারেশনের সময় প্রভাব ফেলে।
  • অপ্টিমাইজেশনের মাধ্যমে কার্যক্ষমতা বৃদ্ধি: ডেটাসেট এবং লজিক অপ্টিমাইজেশন করে Heap Size এবং CPU Time Limit-এর মধ্যে থেকে কার্যক্ষমতা নিশ্চিত করা যায়।

Apex Heap Size এবং CPU Time Limit Salesforce-এর Governor Limits-এর গুরুত্বপূর্ণ অংশ, যা কোডের কার্যক্ষমতা উন্নত করতে ও সীমার মধ্যে কার্যক্রম পরিচালনা করতে সহায়ক।

common.content_added_by

Governor Limit Optimization Techniques

240
240

Governor Limit Optimization Techniques Apex কোড লেখার সময় Governor Limits মেনে চলার জন্য কিছু গুরুত্বপূর্ণ পদ্ধতি ও স্ট্র্যাটেজি, যা Salesforce প্ল্যাটফর্মের স্থায়িত্ব ও পারফরম্যান্স উন্নত করতে সাহায্য করে। Salesforce-এর মাল্টি-টেন্যান্ট আর্কিটেকচারে একাধিক ব্যবহারকারী একত্রে কাজ করার কারণে Governor Limits মেনে চলা অত্যন্ত গুরুত্বপূর্ণ।


১. Bulkify Apex Code

Bulkify করার মাধ্যমে একাধিক রেকর্ডে একত্রে SOQL বা DML অপারেশন চালানো যায়। এটি SOQL বা DML অপারেশনের সংখ্যা কমিয়ে Governor Limits বজায় রাখতে সহায়ক।

উদাহরণ:

public void updateAccounts(List<Account> accounts) {
    List<Account> accountsToUpdate = new List<Account>();
    for (Account acc : accounts) {
        if (acc.Industry == 'Technology') {
            acc.Rating = 'Hot';
            accountsToUpdate.add(acc);
        }
    }
    // Bulk DML Operation
    if (!accountsToUpdate.isEmpty()) {
        update accountsToUpdate;
    }
}
  • এখানে একাধিক Account রেকর্ডকে একত্রে update অপারেশন চালিয়ে Governor Limits বজায় রাখা হয়েছে।

২. Efficient Querying Techniques

SOQL কুয়েরিতে শুধুমাত্র প্রয়োজনীয় ফিল্ডগুলো কুয়েরি করুন এবং কুয়েরিতে WHERE ক্লজ ব্যবহার করে রেকর্ড ফিল্টার করুন। এতে SOQL কুয়েরির সংখ্যা কমানো যায় এবং ডেটা ফেচিং সীমার মধ্যে থাকে।

উদাহরণ:

List<Account> accounts = [SELECT Id, Name FROM Account WHERE Industry = 'Technology'];
  • এখানে শুধুমাত্র Id এবং Name ফিল্ড এবং নির্দিষ্ট Industry ভিত্তিক রেকর্ড ফেচ করা হয়েছে।

৩. Collections (List, Set, Map) ব্যবহার করুন

Bulk SOQL এবং DML অপারেশন পরিচালনার জন্য Collections যেমন List, Set, এবং Map ব্যবহার করুন। এগুলো ডুপ্লিকেট রেকর্ড ম্যানেজ করতে এবং পারফরম্যান্স উন্নত করতে সহায়ক।

উদাহরণ:

Set<Id> accountIds = new Set<Id>();
for (Contact con : contacts) {
    accountIds.add(con.AccountId);
}
List<Account> accounts = [SELECT Id, Name FROM Account WHERE Id IN :accountIds];
  • এখানে Set ব্যবহার করে ডুপ্লিকেট Account Id অপসারণ করে একত্রে SOQL কুয়েরি করা হয়েছে।

৪. Avoid SOQL and DML Inside Loops

SOQL বা DML স্টেটমেন্ট লুপের ভিতরে ব্যবহার না করা উচিত। লুপের ভিতরে SOQL বা DML স্টেটমেন্ট ব্যবহার করলে Governor Limits দ্রুত পূরণ হতে পারে।

অকার্যকর উদাহরণ:

for (Account acc : accounts) {
    acc.Name = 'Updated Name';
    update acc; // DML inside loop - Not recommended
}

কার্যকর উদাহরণ:

List<Account> updateAccounts = new List<Account>();
for (Account acc : accounts) {
    acc.Name = 'Updated Name';
    updateAccounts.add(acc);
}
update updateAccounts; // Bulk DML outside loop
  • এখানে DML অপারেশন লুপের বাইরে এনে একবারেই চালানো হয়েছে।

৫. Use @future and Queueable Apex for Long-Running Processes

বড় ডেটাসেট প্রসেসিং বা দীর্ঘমেয়াদি কাজের জন্য @future এবং Queueable Apex ব্যবহার করুন। এটি Governor Limits লঙ্ঘন না করেই আলাদা ট্রানজ্যাকশনে কাজ চালিয়ে যেতে সাহায্য করে।

উদাহরণ:

@future
public static void processLargeData(List<Id> recordIds) {
    List<Account> accounts = [SELECT Id, Name FROM Account WHERE Id IN :recordIds];
    for (Account acc : accounts) {
        acc.Industry = 'Updated Industry';
    }
    update accounts;
}
  • এখানে @future মেথড ব্যবহার করে বড় ডেটাসেট এক আলাদা ট্রানজ্যাকশনে প্রসেস করা হয়েছে।

৬. Use Custom Settings and Custom Metadata

SOQL কুয়েরি ব্যবহার না করে Custom Settings বা Custom Metadata থেকে ডেটা সংগ্রহ করা যায়। এতে করে SOQL কুয়েরির সংখ্যা কমে এবং Governor Limits বজায় থাকে।

উদাহরণ:

Integer maxLimit = CustomSetting__c.getInstance().Max_Limit__c;
  • এখানে SOQL কুয়েরি না করে Custom Setting থেকে ডেটা আনা হয়েছে।

৭. Caching ব্যবহার করুন

Frequently used ডেটা ক্যাশে করে রাখা Governor Limits বাঁচাতে সহায়ক, কারণ এতে ডেটা পুনরায় কুয়েরি না করেই ক্যাশ থেকে ফেচ করা যায়। Caching করার মাধ্যমে বারবার SOQL কুয়েরি না করে কোড কার্যকরী হয়।


৮. Leverage Batch Apex for Large Data Volumes

Batch Apex ব্যবহার করে বড় ডেটাসেট ছোট ছোট ব্যাচে ভাগ করে প্রক্রিয়াকরণ করা যায়। এটি গভর্নর লিমিট বজায় রেখে বড় ডেটাসেট প্রক্রিয়া করতে সহায়ক।

উদাহরণ:

public class AccountBatchJob implements Database.Batchable<SObject> {
    public Database.QueryLocator start(Database.BatchableContext bc) {
        return Database.getQueryLocator('SELECT Id, Name FROM Account');
    }

    public void execute(Database.BatchableContext bc, List<SObject> scope) {
        List<Account> accounts = (List<Account>) scope;
        for (Account acc : accounts) {
            acc.Name = 'Batch Updated';
        }
        update accounts;
    }

    public void finish(Database.BatchableContext bc) {
        System.debug('Batch Process Completed');
    }
}
  • এখানে Batch Apex ব্যবহার করে বড় ডেটাসেট প্রক্রিয়া করা হয়েছে, যা Governor Limits বজায় রাখতে সহায়ক।

৯. Proper Error Handling with Try-Catch

Exception হ্যান্ডলিংয়ের মাধ্যমে কোডের স্থায়িত্ব বৃদ্ধি করা যায়। Try-Catch ব্লক ব্যবহার করে ত্রুটি হ্যান্ডলিং করলে অ্যাপ্লিকেশন সঠিকভাবে কাজ করতে পারে এবং গভর্নর লিমিটের সীমার মধ্যে থাকে।


১০. Avoid Hard-Coding Limits

কোডে নির্দিষ্ট সংখ্যা বা মান হার্ড-কোড না করে কনফিগারেবল সেটিংস ব্যবহার করা উচিত। এতে কোড আরও স্থায়ী এবং সীমাবদ্ধতার সাথে সামঞ্জস্যপূর্ণ হয়।


সারসংক্ষেপ

Governor Limit Optimization Techniques মেনে কোডিং করলে Apex কোড গভর্নর লিমিটের মধ্যে থেকে কার্যকরীভাবে কাজ করতে পারে। কিছু গুরুত্বপূর্ণ টেকনিক নিচে সারসংক্ষেপ করা হলো:

  1. Bulkify Apex Code: লুপে একাধিক DML এবং SOQL অপারেশন চালানোর পরিবর্তে Bulkify করা।
  2. Efficient Querying Techniques: প্রয়োজনীয় ফিল্ডগুলো ফিল্টার করে কুয়েরি চালানো।
  3. Avoid SOQL and DML Inside Loops: লুপের বাইরে SOQL এবং DML অপারেশন চালানো।
  4. Use @future and Queueable Apex: দীর্ঘমেয়াদি প্রসেসের জন্য আলাদা ট্রানজ্যাকশন ব্যবহার।
  5. Leverage Batch Apex: বড় ডেটাসেট প্রক্রিয়ার জন্য ব্যাচিং করা।
  6. Proper Error Handling: Try-Catch ব্লক দিয়ে ত্রুটি হ্যান্ডল করা।

এ সকল স্ট্র্যাটেজি অনুসরণ করে Salesforce প্ল্যাটফর্মে Governor Limits বজায় রেখে কোডিং করা সম্ভব, যা অ্যাপ্লিকেশনকে স্থায়ী ও কার্যকরী করে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion